<?php
/**
 * common repository file Created by PhpStorm.
 * User: wumengmeng
 * Date: 2019/11/13
 * Time: 09:49
 */

namespace HiCommon\Repository;

use HiCommon\Model\StoreCar;

class StoreCarRepository extends BaseRepository
{
    public function base_model()
    {
        return new \HiCommon\Model\StoreCar();
    }

    /**
     * 分页获取全部数据
     *
     * @param array $arr_option
     *
     * @return mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function get_all($arr_option = [])
    {
        return StoreCar::commonget($arr_option);
    }

    /**
     * 分页获取数据
     *
     * @param array $arr_option
     *
     * @return mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function get_list($arr_option = [])
    {
        return StoreCar::commonpage($arr_option);
    }

    /**
     * 购物车列表
     */
    public function get_all_by_where($arr_option = [])
    {
        return StoreCar::groupBy('goods_product_id')->commonget($arr_option);
    }

    //过滤掉过期的活动
    /*public function get_all_by_where_activity($arr_where, $arr_option = [])
    {
        return StoreCar::where($arr_where)
            ->groupBy('goods_product_id')
            ->where(function ($query) {
                $query->whereHas('get_activity',
                    function ($query) {
                        $thisTime = time();
                        $query->where('start_time', '<=', $thisTime);
                        $query->where('over_time', '>=', $thisTime);
                    });
            })->commonget($arr_option);
    }*/

    public function get_list_by_where_in($id_array)
    {
        return StoreCar::whereIn('id', $id_array)->get()->toArray();
    }


    /**
     * 根据条件统计数量
     *
     * @param array $arr_where
     *
     * @return mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function get_count_by_where($arr_where)
    {
        return StoreCar::where($arr_where)->count();
    }

    /**
     * 根据条件统计总和
     *
     * @param array $arr_where
     * @param string $s_field
     *
     * @return mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function get_sum_by_where($arr_where = [], $s_field = 'mark')
    {
        return StoreCar::where($arr_where)->sum($s_field);
    }

    /**
     * 根据条件批量删除信息
     *
     * @param array $arr_where
     * @param bool $method
     *
     * @return mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function delete_by_where_in($arr_where = [])
    {
        return StoreCar::whereIn('id', $arr_where)->commondelete(true);
    }

    public function delete_by_where($arr_where = [])
    {
        return StoreCar::where($arr_where)->commondelete(true);
    }

    public function delete_goods($arr_where = [])
    {
        return StoreCar::where('type', 2)->whereIn('goods_id', $arr_where)->commondelete();
    }

    /**
     * 通过where获取一条数据
     *
     * @param array $arr_where
     * @param array $arr_option
     *
     * @return mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function get_one_by_where($arr_where, $arr_option = [])
    {
        return StoreCar::where($arr_where)->commonfirst($arr_option);
    }

    public function get_by_where($arr_where, $nid)
    {
        return StoreCar::where($arr_where)->where('id', '!=', $nid)->first(['id', 'user_id', 'goods_product_id']);
    }

    /**
     * 添加一条数据
     *
     * @param array $arr_input
     *
     * @return mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function add_one($arr_input)
    {
        return StoreCar::create($arr_input);
    }

    /**
     * 添加多条数据
     *
     * @param array $arr_data
     *
     * @return mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function add_many($arr_data)
    {
        return StoreCar::insert($arr_data);
    }

    /**
     * 查询一条数据
     *
     * @param int $n_id
     * @param array $arr_option
     *
     * @return mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function get_one(int $n_id, $arr_option = [])
    {
        return StoreCar::commonfind($n_id, $arr_option);
    }

    /**
     * 更新或新建一条数据
     *
     * @param $arr_where
     * @param $arr_input
     *
     * @return mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function edit_or_create($arr_where, $arr_input)
    {
        $res = StoreCar::where($arr_where)->first();
        if (is_null($res)) {
            StoreCar::create(array_merge($arr_where, $arr_input));
        } else {
            StoreCar::where($arr_where)->update($arr_input);
        }
        return StoreCar::where($arr_where)->first();
    }

    /**
     * 修改一条数据
     *
     * @param array $arr_input
     *
     * @return mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function edit_one(array $map, array $arr_input)
    {
        return StoreCar::where($map)->update($arr_input);
    }

    /**
     * 删除一条数据
     *
     * @param int $n_id
     *
     * @return mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function delete_one(int $n_id)
    {
        return StoreCar::where('id', $n_id)->commondelete(true);
    }

    /**
     * 修改一条数据状态
     *
     * @param int $n_id
     * @param int $n_state
     *
     * @return mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function change_one_state(int $n_id, int $n_state)
    {
        return StoreCar::where('id', $n_id)->update(['state' => $n_state]);
    }

    /**
     * 字段自增
     *
     * @param int $n_id
     * @param string $s_field
     * @param int $n_step
     *
     * @return mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function increase_num($n_id, $s_field = 'goods_num', $n_step = 1)
    {
        return StoreCar::where('id', $n_id)->increment($s_field, $n_step);
    }

    /**
     * 字段自减
     *
     * @param int $n_id
     * @param string $s_field
     * @param int $n_step
     *
     * @return mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function decrease_num($n_id, $s_field = 'goods_num', $n_step = 1)
    {
        return StoreCar::where('id', $n_id)->decrement($s_field, $n_step);
    }


}